23

» WarCraft 3 / Как сделать такой хп-бар

Похожие вопросы:

ответ
Где-то я видел наработку с этими хр барами.
Найдётся в ресурсах пользователя JesusHipster.
ответ
то, что оно скрывает панель, это лишь часть свойств этого флага. Что оно еще дает, я не в курсе.
ответ
А много ли юнитов будут с хп баром? если серьёзно то решения нет и фрейм не найти этот, оно зашито в недра движка. Но опять таки Disable pre-selection вариант всё таки, если потом отрисовать кастомные хп бары через специальную модель, если она будет эффектом, то это не вызовет никакой доп нагрузки даже у 100 юнитов.

23

» WarCraft 3 / Не работает специальная вставка

Похожие вопросы:

ответ
потому что ты не должен закрывать мдлвис, а скопировать, и прямо из него открыть новую модель

23

» WarCraft 3 / Одна способность активирует другую

Похожие вопросы:

ответ
datar1231, Именно поэтому говорят не делать 2 две способности от друга потому когда юнита приходит приказ на использование способности он использует твою нестандартную способность но основываясь на айди стандартной способности или делай на основе другой или незанаю подействует ли канал.
ответ
что бы она сразу перешла в режим наведения.. а то выглядит как баг, из-за которого надо нажимать по 2 раза...
Gui -> Force player to use X key
Согласовываешь с хоткеем строительства
======================================
Бафф имеется в виду Бафф или Спецэффект?
Если спецэффект:
DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl",u,"origin"))
Если баф, то возможно будет работать так:
call UnitAddAbility(u, 'buff')
ответ
Это вроде с Хайва, у меня в сохранённых лежит.

23

» WarCraft 3 / Путь в ад?

Похожие вопросы:

ответ
Как все запущено...
Id абилки это именно целое число, в 256'ричной системе счислений он выглядит как 'ANeg' к примеру, а как число в десятичной системе - 1095656807 вот так, ну или вот так 414E6567 как шестнадцатеричное.
Делаешь базу данных, всех абилок и всех пустышек, либо через хештаблицу - первое число луюбое, второе твоя пустышка, сохраненное значение - твой ид абилки.
Либо 2 массива, в первом id пустышек, во втором абилок и перебор циклом, пока число в ячейке n массива пустышек не будет равно id текущей пустышки (ту которую купил юнит), ну а потом вручаем юниту абилку из массива абилок из ячейки n.
Способов как сопоставить 2 массива чисел не мало, так что мб подумаешь о завязывании с ГУИ, говорят он вызывает рак мозга..

23

» WarCraft 3 / Как сделать такой инвентарь?

Похожие вопросы:

ответ
Недавно был такой вопрос.
Перескажу, хоть и не поощряю вопросов, заданных без предварительного долгого лурка.
Легче всего реализуется через использование "уровня предмета" как категории и последующей триггерной проверки, чтобы в инвентаре не было двух предметов одного уровня (цикл+условие).
От себя добавлю, что можно создать предметы-болванки на каждый тип предмета, которые нельзя выбросить. Удалять их при поднятии предмета соответствующего типа (уровня) и добавлять при его выбрасывании (то же цикл+условие, только событие другое.)
ответ
отменять постройку юнита если технология уже ап
либо как сразу говорили через ап здания
где каждому твоему зданию будет соответствовать такое же здание но с дополнительным слотом
с продажей юнита открываешь доту и смотришь как там сделан спелл передать предметы у куры
он сделан как раз через продажу юнита
иначе никак
если не нравится пожалуйся богу об этом
или близардам
пусть выпустят новый патч специально для тебя
ответ
это нужно очень-очень хорошо делать модели и кодить
xgm.guru/p/renderedge к приимеру на таком уровне. там тоже есть кнопочки и др.
Помню, что Меллиса что-то похожее делала, еще я где-то видел наработку, там при выборе героя, можно крутить героя, и еще характеристики +описание, если не понрав следующего героя смотрим. Вот на видео Вадима видел. Но то, что ты предлагаешь, это еще внешность менять героя как в фифа, короче максимальной вариации моделей наверное не много будет в варкрафте. Но было бы круто
ответ
Чет никаких прорывов, смена уровня инвентаря да спеллбуки, изи.
Вы бы тему Render Engine почитали, вот там так как нигде больше, можно замутить интерфейс хоть по мотивам доты 2, хоть по мотивам диаблы, да вовсе как угодно.
ответ
Вместо когтей под задачу лучше подходит аура с бонусным уроном, можно настроить как прямой бонус так и процент, плюс отображается в статусе.
Если система работает в рамках десятков юнитов, за оптимизацию не беспокойся. Если бы речь шла о сотнях юнитов с данным эффектом, но сомневаюсь.

23

» WarCraft 3 / Помощь с заклинанием

Похожие вопросы:

ответ
  1. а) Создай 2 переменные-массива по типу "боевая единица" (массив - чтобы для каждого игрока, мы ведь за мультиплеер трем, прально?), назови типа MyChampion и MyChampionDummy.
    б) подготовь невидимого героя-пустышку с нужной тебе иконкой, убери ману, если у чемпиона ее нет. Убери ему радиус обзора, убери галочки типа "отмечать на мини-карте" - остальные - опционально.
    В дальнейшем мы будем синхронизировать пустышку и реального чемпиона, создавая видимость одной боевой единицы.
    Итак, наш первый триггер:
в) Отследи первое появление чемпиона, когда это случится - создай для игрока героя-пустышку. Соответственно сделай MyChampion [number of (Owner of trained unit)]= last trained unit, следующей строчкой создай того самого героя-пустышку для (owner of trained unit) и сделай MyChampionDummy = last created unit. Теперь мы прочно связали этих чуваков. Этот же триггер запускает остальные.
г) Отслеживание здоровья. Сделай изначально выключенный цикличный триггер, там, каждые 0.3 секунды. Триггер запускается пунктом в). Каждые 0.3 секунды меняй здоровье героя (чья икона висит, надо чтобы она соответствовала, прально?) в % на здоровье самого чемпиона.
д) пропищи событие, мол, если выбирает игрок своего героя (кликая на иконку) выбирается чемпион
е) убивай героя вместе с чемпионом
ж) отключай триггеры с проверкой и выбором, пока чемпион мертв
з) не забывай обновлять переменную чемпиона с каждым новым чемпионом.
ответ
Ой, всё
ответ
Нужно создать способность на основе стандартной книги заклинаний (Особые -> Предметы -> Книга заклинаний). Поменять ее тип на "Герой", добавить уровни. Для каждого уровня "Книги" можно указать свои заклинания (Данные - Список заклинаний). Если нужно, чтобы вложенные заклинания повышали свой уровень при улучшении "книги", можно создать их в нескольких вариантах ("Грабеж 1", "Грабеж 2", ...) и указывать на каждом уровне книги нужные варианты вложенных способностей.
Можно написать триггер, который будет при изучении героем "Книги заклинаний" менять уровни вложенных способностей (тогда не потребуется создавать разные варианты одной и той же способности, нужно будет просто добавить необходимым заклинаниям уровни). Пример триггера:
  • Боевая единица - Unit приобретает способность
  • Если Learned hero skill = Книга заклинаний
  • Боевая единица - Set level of Грабеж for (Learning hero) to (Level of Книга заклинаний for (Learning hero))
ответ
Sicre, только на 1 вопрос будем отвечать в этой теме, у тебя за убийство все пачки или за каждого юнита отдельный дроп?
Если за каждого, то по событию юнит определённого типа умирает, создвай предмет в точке смерти, можно также прописать шанс.
Если же ты работаешь с группой и даёшь общую награду за смерть группы, тогда надо группу создать, обозвать её например (пауки у фантана), добавить туда юнитов, и отслеживать смерть всей группы, ну и так будет каждый раз собственно
ответ
Sexua1, никак на гуи не обойти, запомни у тебя есть лишь GetEventDamage() (Damage taken), источник и цель. Отличать тип урона нельзя, нет таких функций, есть ухищрения - вручить юниту пассивку рунных браслетов с резистом 200%, тогда весь магический урон станет отрицательным, таким образом можно отличить урон от атаки (условно, слеш атаки и мины течиса это не отфильтрует) ибо положительный урон физический, отрецаиельный - магический, но чтобы убрать эффект лечения от маг урона, придется ставить таймер на 0.00 сек, снижать хп, а после удалять пассивку и наносить маг урон от лица юнита еще раз, потом снова вручать пассивку, сделав еще переменную для исключения рекурсии.

23

» Программирование / Ошибка в Коде

Похожие вопросы:

ответ
Проблема решена, оказывается у fs.appendfilesync есть проблемы с заполнением пустых файлов. Замена на fs.writeFileSync решило проблему.

23

» WarCraft 3 / Урон тригерно

Похожие вопросы:

ответ
LordDracula, да ладно думаю ответ был и так очевиден но мало ли.
ответ
ответ
Но как делать на MUI из специфических событий я понятие не имею.
Через GUI никак. Возможность проверить тип урона завезли, а плашку в GUI редактор нет. Только кодом.
Либо кодер напишет на заказ систему для использования в GUI.
Есть еще довольно популярный DamageEngine, но никогда не пользовался.
ответ
native UnitDamageTarget             takes unit whichUnit, widget target, real amount, boolean attack, boolean ranged, attacktype attackType, damagetype damageType, weapontype weaponType returns boolean

23

» WarCraft 3 / Движение юнита

Похожие вопросы:

ответ
В РО есть графа у юнита Движение - скорость поворота там указываешь в секундах скорость его поворота на 180*. Я ставлю 1.0сек, у каждого юнита по умолчанию своя(обычно не больше 0.4сек). Стоять на месте он будет как раз это время которое поворачивается. Разворачиваться будет сразу после приказа.
ответ
Нужно чтобы юниты не принадлежали нейтральным игрокам или компьютеру.
ответ
Отпускание WASD встроенными средствами отловить невозможно, поэтому полноценное управление движением через WASD нереализуемо (как минимум, пока что). Систем же движения с управлением стрелками на сайте есть великое множество, на любой вкус, пользуйтесь поиском.
ответ
там один из воронов от медива другой от друидов воронов
от друидов-воронов точно должно работать
чтобы было легче разобраться можешь в редакторе ворона от медива, который НЕ Arav, переименовать и юзать НЕпереименованный
если нет change ищи set
и так посмотри вкладку Анимация - по-моему там смена высоты полета
ответ
Вот такие настройки SetCameraTargetControllerNoZForPlayer(p,hero, 10,10,true) каждые 0,03125 сек при вот этом движении
Лучшего ничего не придумал... но для меня проблема тоже актуальна

23

» WarCraft 3 / Дальность атаки

Похожие вопросы:

ответ
Вообще в мемхаке есть же.
Но новички в картостроительстве, большинство серверов и отчасти последний патч варкрафта в мемхак не понимают.
ответ
XGM Bot:
Похожие вопросы:

ответ
lll_Kirito_lll:
Так что за прием со сферой?
Ставишь юниту в разделе Бой - Атаки на Нет, потом делаешь две способности на базе одной из сфер (например Предмет: электрическая атака), у одной из них Включен индекс атаки - 1, у другой - 2. Добавляешь первую способность юниту в РО. Когда тебе нужно изменить дальность атаки - удаляешь ту способность сферы, которая есть у юнита и добавляешь другую. Правда при этом не будет видно иконки атаки.
ответ
  1. Способность "Склад" убирает атаку. Нужна атака - не добавляй "Склад".
  2. Без дополнительных выкрутасов - нет.
ответ
Вообще в мемхаке есть же.
Но новички в картостроительстве, большинство серверов и отчасти последний патч варкрафта в мемхак не понимают.
ответ
Морф в другого героя, можно практически без кода, про руны и морфы была статья.
Так же мемхаком можно редактировать параметры атаки.
xgm.guru/p/wc3/powerups вот линк
ответ
Если не ошибаюсь - нужно еще дистанцию получения приказа поднять

ответ
так это самый простой вариант там приказ сам отлавливать .а не замах я так к примеру написал ( но гемора с проверками будет много мне кажется )
можно еще посути менять дистанцию получение приказа на отаку менять у юнита
call SetUnitAcquireRangeBJ( gg_unit_Hblm_0000, 100.00 )
кароч сделал только до ума довести нужно но вроде все работает.
ответ
Для увеличения дальности атаки используют улучшение на основе длинностволых мушкетов. Добавить всем героям это улучшение после чего при получении предмета выставляется уровень улучшения функцией SetPlayerTechResearched
ответ
~8gabriel8:
Просто улучшение на основе Длинноствольных мушкетов Альянса.

23

» WarCraft 3 / Как выдать способность зданию

Похожие вопросы:

ответ
что бы она сразу перешла в режим наведения.. а то выглядит как баг, из-за которого надо нажимать по 2 раза...
Gui -> Force player to use X key
Согласовываешь с хоткеем строительства
======================================
Бафф имеется в виду Бафф или Спецэффект?
Если спецэффект:
DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl",u,"origin"))
Если баф, то возможно будет работать так:
call UnitAddAbility(u, 'buff')
ответ
~8gabriel8:
Нужно улучшение в требованиях способности поставить, посмотри какие-нибудь стандартные способности, чтобы понять, например, Внутреннее пламя Целителя Альянса.
ответ
Спеллбук плюс улучшения повышающие кол-во здоровья юнита? Известный баг.

23

» Администрация XGM / Дополнительные поля в создании вопросов

Похожие вопросы:

ответ
Такой возможности, к сожалению, система вопросов не предоставляет. Это работает только с обычными ресурсами. И реализовывать в ближайшее время точно не планируется

23

» WarCraft 3 / Где звуки?

Похожие вопросы:

ответ
всё, разобрался
ответ
xgm.guru/p/wc3/oldsound Вот здесь посмотри, может это то, что ищешь. Там есть ссылка в одном из коментариев. cloud.mail.ru/public/4Lj9/56Ffm6tpu
ответ
Вроде бы удалось решить проблему самостоятельно. Ошибка действительно была элементарной - идентификатор не устраивал введённый туда заглавный символ, а я не знал об этом. Простите за беспокойство.
ответ
SсRealm:
ofeerist:
Надо искать в war3.mpq и заменять через импорт
Да это я понял, я тут хотел понять где она в менюшке прячется

23

» WarCraft 3 / Что не так?

Похожие вопросы:

ответ
Да у тебя куча дыр, во-первых ты не запустил триггер 115 области lumber direction, и оно соответственно не реагирует на событие. Во-вторых перепроверь gold проверку условия на да или нет в той карте которую ты отправил стоит нет
А золото не движется потому что ты ожидание 0,5 сек поставил а область в милисекунде от изначальной то есть триггер не успевает запуститься
ответ
Viktor19:
Путь текстуры правильно указал?
да, сейчас вообще обратил внимание что текстуры идущие в комплекте не воспринимаются почему-то, а именно "Shield.blp".
Все равно проблема не решилась, вроде бы смог заменить текстуру, которую не видел но варик не воспринимает модель.
1
ответ
Afterdeath, скрин не могу, я с мобильного сейчас. Текстом напишу, по памяти.
Действия:
Pick every unit in playable map area and do multiple actions:
If picked unit belongs to ally of (Игрок 1) = да then (это союзник игрока 1).
Hide picked unit.
ответ
Roy Mustang:
Slork:
Поставь matching unit вместо picked unit.
ответ
Делай мвссив с индексом равным номеру игрока (чтоб не запутаться) При событии ставь условие на триггеринг игрока. Если триггенинг игрок = красный то перекидывай соотв. юнита по индексу. напр MyHero[1]. Используй if then else. Все вместится в 1 триггер с кол-вом событий равным кол-ву игроков.

23

» WarCraft 3 / Проверка типа юнитов

Похожие вопросы:

ответ
-_____-
добавляем юнитов в группу при помощи фильтра
магические буковки
native GroupEnumUnitsInRange                takes group whichGroup, real x, real y, real radius, boolexpr filter returns nothing

native GroupEnumUnitsInRect                 takes group whichGroup, rect r, boolexpr filter returns nothing

//на месте фильтра должна быть функция (которая возвращает boolean) обрабатываемая этой

native Condition        takes code func returns conditionfunc

//с помощью этого можно определить жив ли юнит

constant native IsUnitType          takes unit whichUnit, unittype whichUnitType returns boolean

constant unittype UNIT_TYPE_DEAD                        = ConvertUnitType(1)

//а с помощью этого можно проверить чьи это юниты

constant native GetOwningPlayer     takes unit whichUnit returns player
если игрок, чьих юнитов мы проверяем, будет, к примеру, рандомно меняться, то передавай его в функцию фильтра через глобальную переменную, устанавливая ей нужное значение непосредственно перед пиком
если группа будет пуста, значит юнитов в области нет...
я не помню что там да как в гуи, но посидев, поигравшись часик-два с этими функциями можно спокойно написать требующиеся 10-15 строк
рано или поздно пора начинать учить этот чертов джасс!
ответ
Вот, смотри, когда-то и меня вела дорога приключений:
Тот же вопрос
ответ
решил проблему костылём - дал возможность рабочему строить только башню - шаблонку, которая в свою очередь может улучшаться в две указанные башни. Взаимосвязь поставить только от башни - шаблонки. Лимит поставил на башню шаблонки.
Но тема не закрыта. Хотелось бы узнать можно ли решить проблему без костылей.
ответ
По завершении строительства фермы увеличивай число получаемого игроком золота (переменная из масива), а при смерти - уменьшай. (соответственно, наоборот, для пехотинцев)
А вообще - фича бесполезная в рамках стандартного мили-режима варкрафта. Слишком профитно уходить в экономику.
ответ
Через тип текстуры земли или как там трава называется.
За кругом используешь ту, которой нет в игровой зоне. Если юнит находиться на ней, то твои действия.

23

» WarCraft 3 / SetUnitVertexColor

Похожие вопросы:

ответ
Выключай даммику пасинг и переноси в нужную точку.
local unit d
local real x=GetUnitX(u)
local real y=GetUnitY(u)
......
set d=CreateUnit(p,dummy,0,0,0)
call SetUnitPathing(d,false)
call SetUnitX(d,x)
call SetUnitY(d,y)
ответ
quq_CCCP, благодарю, но всё же хотелось бы именно с thistype.next, thistype.prev.
кажется, я сделаль:
struct data
        static timer    period = CreateTimer( )
               thistype prev
               thistype next

               unit     u
               integer  a

        method destroy takes nothing returns nothing
            set this.prev.next = this.next
            set this.next.prev = this.prev

            if ( thistype(0).next == 0 ) then
                call PauseTimer( period )
            endif

            call thistype.deallocate( this )
        endmethod

        static method iterate takes nothing returns nothing
            local thistype this = thistype( 0 ).next

            loop
                exitwhen ( this == 0 )

				set this.a = this.a + 1
				call SetUnitVortexColor( this.u, 255, 255, 255, this.a )

                if ( this.a > 255 ) then
                    call this.destroy( )
                endif

                set this = this.next
            endloop
        endmethod

        static method createUnit takes nothing returns thistype
            local thistype this = thistype.allocate( )

            set this.next = 0
            set this.prev = thistype(0).prev
            set this.next.prev = this
            set this.prev.next = this

			set this.u = CreateUnit(...)
			set this.a = 0
			call SetUnitVortexColor( this.u, 255, 255, 255, this.a )
            
            if ( this.prev == 0 ) then
                call TimerStart( period, 0.03125, true, function thistype.iterate )
            endif

            return this
        endmethod

    endstruct
ответ
исправил некоторые недочёты, и всё же хотелось бы узнать, может еще есть какие-то недоработки тут?
раскрыть
library UnitRecycler requires UnitRevive



    globals

        private  constant  integer         MAX_STOCKED_RAWCODES         =  256
        private  constant  integer         MAX_STOCKED_UNITTYPES        =  1024

        private  constant  group           stock                        =  CreateGroup( )
        private            unit            recycledUnit                 =  null

        private            integer         stockedRawCodesCount         =  0
        private            integer  array  stockedRawCodes

        private            integer  array  stockedUnitCount
        private            unit     array  stockedUnit[ MAX_STOCKED_RAWCODES ] [ MAX_STOCKED_UNITTYPES ]

    endglobals



    private constant function IsUnitAlive takes unit whichUnit returns boolean
        return not ( IsUnitType( whichUnit, UNIT_TYPE_DEAD ) or  ( GetUnitTypeId( whichUnit ) == 0 ) )
    endfunction



    private function RAW2S takes integer value returns string
        local  string   charMap         =  ".................................!.#$%&'()*+,-./0123456789:;<=>.@ABCDEFGHIJKLMNOPQRSTUVWXYZ[.]^_`abcdefghijklmnopqrstuvwxyz{|}~................................................................................................................................."
        local  string   result          =  ""
        local  integer  remainingValue  =  value
        local  integer  byteno          =  0
        local  integer  charValue

        loop
            set charValue = ModuloInteger(remainingValue, 256)
            set remainingValue = remainingValue / 256
            set result = SubString(charMap, charValue, charValue + 1) + result
     
            set byteno = byteno + 1
            exitwhen ( byteno == 4 )
        endloop

        return result
    endfunction



    private function GetUnitFromStock takes integer rawCode returns unit
        local  integer  i  =  0

        loop

            if ( stockedRawCodes[ i ] == rawCode ) and ( stockedUnitCount [ i ] > 0 ) then

                set  stockedUnitCount [ i ]                             =  stockedUnitCount [ i ] - 1
                set  recycledUnit                                       =  stockedUnit [ i ] [ stockedUnitCount [ i ] ]
                set  stockedUnit      [ i ] [ stockedUnitCount [ i ] ]  =  null
                exitwhen true
            endif

            if ( i == stockedRawCodesCount ) then

                debug call BJDebugMsg( "GetUnitFromStock(...) :    '" + RAW2S( rawCode ) + "' unittype stock is emty. New unit has been created." )
                set recycledUnit = CreateUnit( Player( 15 ), rawCode, HIDDEN_X, HIDDEN_Y, 0.0 )
                exitwhen true
            endif

            set i = i + 1
        endloop

        return recycledUnit
    endfunction



    private function AddUnitToStock takes unit whichUnit returns nothing
        local  integer rawCode  =  GetUnitTypeId( whichUnit )
        local  integer i        =  0

        loop
            exitwhen ( stockedRawCodes[ i ] == rawCode )

            if ( i == stockedRawCodesCount ) and ( stockedRawCodesCount < MAX_STOCKED_RAWCODES ) then
                set stockedRawCodes[ i ] = rawCode
                set stockedRawCodesCount = stockedRawCodesCount + 1
                exitwhen true

            elseif ( stockedRawCodesCount == MAX_STOCKED_RAWCODES ) then
                debug call BJDebugMsg( "AddUnitToStock(...) :    Cannot add unit to stock, max rawcode count achieved. Unit has been removed." )
                call KillUnit( whichUnit )
                call ShowUnit( whichUnit, false )
            endif

            set i = i + 1
        endloop

        if ( stockedUnitCount [ i ] < MAX_STOCKED_UNITTYPES ) then
            set stockedUnit      [ i ] [ stockedUnitCount [ i ] ]  =  whichUnit
            set stockedUnitCount [ i ]                             =  stockedUnitCount [ i ] + 1

        else
            debug call BJDebugMsg( "AddUnitToStock(...) :    Cannot add unit to stock, max unittype count achieved. Unit has been removed." )
            call KillUnit( whichUnit )
            call ShowUnit( whichUnit, false )
        endif

    endfunction



    function GetRecycledUnit takes player owner, integer rawCode, real x, real y, real facing returns unit
        if IsHeroUnitId( rawCode ) then
            debug call BJDebugMsg( "GetRecycledUnit(...) :    Attempt to  get recycled hero unit." )

        else
            set recycledUnit = GetUnitFromStock( rawCode )
            call GroupRemoveUnit    ( stock, recycledUnit )
            call PauseUnit          ( recycledUnit, false )
            call SetUnitOwner       ( recycledUnit, owner, true )
            call SetUnitPosition    ( recycledUnit, x, y )
            call SetUnitFacing      ( recycledUnit, facing )
            call SetUnitPathing     ( recycledUnit, true )
            call SetUnitInvulnerable( recycledUnit, false )
            call ShowUnit           ( recycledUnit, true )

            return recycledUnit
        endif

        return null
    endfunction



    function RecycleUnit takes unit whichUnit returns boolean
        if ( whichUnit == null ) then
            debug call BJDebugMsg( "RecycleUnit(...) :    Attempt to recycle a null unit." )
            return false

        elseif IsUnitAlive( whichUnit ) then
            debug call BJDebugMsg( "RecycleUnit(...) :    Attempt to recycle an alive unit." )
            return false

        elseif IsUnitInGroup( whichUnit, stock ) then
            debug call BJDebugMsg( "RecycleUnit(...) :    Attempt to recycle an already recycled unit." )
            return false

        elseif IsHeroUnitId( GetUnitTypeId( whichUnit ) ) then
            debug call BJDebugMsg( "RecycleUnit(...) :    Attempt to recycle a hero unit." )
            return false

        elseif ReviveUnit( whichUnit ) then
            call GroupAddUnit       ( stock, whichUnit )
            call PauseUnit          ( whichUnit, true )
            call SetUnitOwner       ( whichUnit, Player( 15 ), false )
            call SetUnitState       ( whichUnit, UNIT_STATE_LIFE, GetUnitState( whichUnit, UNIT_STATE_MAX_LIFE ) )
            call SetUnitState       ( whichUnit, UNIT_STATE_MANA, GetUnitState( whichUnit, UNIT_STATE_MAX_MANA ) )
            call SetUnitScale       ( whichUnit, 1.0, 0.0, 0.0 )
            call SetUnitVertexColor ( whichUnit, 255, 255, 255, 255 )
            call SetUnitFlyHeight   ( whichUnit, GetUnitDefaultFlyHeight( whichUnit ), 0.0 )
            call SetUnitPathing     ( whichUnit, false )
            call SetUnitInvulnerable( whichUnit, true )
//          call ShowUnit           ( whichUnit, false )
            call SetUnitPosition    ( whichUnit, HIDDEN_X, HIDDEN_Y )
            call AddUnitToStock     ( whichUnit )
            return true

        else
            debug call BJDebugMsg( "RecycleUnit(...) :    Cannot revive this unit." )
            return false
        endif

        return false
    endfunction



endlibrary
ответ
Ну тут вся фитча в канале, тут чаннелинг когда завершится тогда бара переместится + защита от сбивания приказа, т.е снова начинает кастовать скилл. Сам ульт бары основан на канале, смотри его настройки. Мне больше нравился старый вариант, где бара мгновенно кастовал ульт и растворялся в воздухе, после атаковал цель...
ответ
Локейшены нельзя двигать локально, глобальный хендл. Двигай для всех и бери высоту для всех, ибо глобал параметры.

23

» WarCraft 3 / Эффекты на экране

Похожие вопросы:

ответ
Самое простое - отредактировать стандартные лучи. Сделать их максимально толстыми наверху и обычными пониже, увеличить количество частиц в секунду и время жизни. Можно и переблёскивающийся оттенок сделать сверху на середину.
Если правильно настроить угол падения, то можно добиться, чтобы лучи были видны только по краям камеры.Поищи статью про погоду. Хотя можешь воспользоваться этой картой, но там нет пояснений, только файл погоды и путь.
Редактировать удобнее через SLKEditor
ещё есть вариант наложить интерфейс моделью времени.
ответ
но когда срабатывает одновременно в некоторых случаях текст остается, в чем причина не знаю
причина в бж функциях
избавься от бж и всё норм будет
ответ
нет, birth не вшита в stand...
автор просто немного накосячил с анимацией видимости...
держи...
на этот раз бесплатно и без смс..)
ответ
попробуй что я сделал)
GetMouseX() не может вызывать десинхрон, т.к не создает хендл

Десинхронило потому что ты делал условие if x>=1485 and x<=1485+61 and y>=1000 and y<=1064 then
на машинах других игроков X был равен 0 и поэтому он не проходил через условие, т.е получается что ты создавал игровой объект локально
ответ
И что это такое? Это прямое нарушение правил. А за ссылками в гугл. На большую часть вопросов есть ответы в виде статей или других вопросов.

23

» WarCraft 3 / 2 Клифа

Похожие вопросы:

ответ
Мне не надо так, мне надо что-бы КАЖДЫЙ клиф КАЖДОГО таила был свои, со своими текстурами
в очередной раз великие планы рушатся под натиском жестокой реальности
ответ
Самое главное - получить нормаль, вот некоторые функции, которые тебе пригодятся:
float3 GetNormal(float3 a, float3 b, float3 c)
{
	float wrki;
	float3 v1 = float3.create();
	float3 v2 = float3.create();
	float3 normal = float3.create();

	v1.x = a.x - b.x;
	v1.y = a.y - b.y;
	v1.z = a.z - b.z;

	v2.x = b.x - c.x;
	v2.y = b.y - c.y;
	v2.z = b.z - c.z;

	wrki = SquareRoot(sqr(v1.y * v2.z - v1.z * v2.y) + sqr(v1.z * v2.x - v1.x * v2.z) + sqr(v1.x * v2.y - v1.y * v2.x));
	normal.x = (v1.y * v2.z - v1.z * v2.y) / wrki;
	normal.y = (v1.z * v2.x - v1.x * v2.z) / wrki;
	normal.z = (v1.x * v2.y - v1.y * v2.x) / wrki;

	return normal;
}

float DotProduct(float3 v1, float3 v2)
{
	return v1.x*v2.x + v1.y*v2.y + v1.z*v2.z;
}

float3 Reflect(float3 ray, float3 normal)
{
	return -2 * DotProduct(ray, normal) * normal + ray;
}
Далее в функции движения снаряда определяем столкновение с землёй, получаем нормаль и строим вектор отражения по данной нормали и текущей скорости снаряда:
float3 v1 = float3.New(curPos.x+2, curPos.y+2, GetTerrainZ(curPos.x+2, curPos.y+2));
float3 v2 = float3.New(curPos.x+2, curPos.y, GetTerrainZ(curPos.x+2, curPos.y));
float3 v3 = float3.New(curPos.x, curPos.y+2, GetTerrainZ(curPos.x, curPos.y+2));
float3 normal = GetNormal(v1, v2, v3);

float3 reflect = Reflect(curVelocity, normal);
ответ
Нужно отредактировать файл MiscData, чтобы создавать более крутые склоны (тогда зависимость высоты от размера кисти уменьшится).
А именно строку "MaxSlope=50" на "MaxSlope=90".

23

» IrInA Host Bot / Жалоба

Похожие вопросы:

ответ
Полностью поддерживаю решение того/тех, кто понизил уровень, т.к. ваши срачи в блогах не только бессмысленны, но и не несут развлекательного характера, т.е. абсолютно пустая трата времени и мозговых клеток.
Извинение также ничего не значит, имхо, т.к. нет гарантий, что подобные ситуации не повторятся.
Однако это не значит, что если вы будете делать что-то более интересное или хотя бы не бессмысленное в своих блогах, то вам не повысят уровень снова. Т.е. вы можете в принципе писать что хотите, но если это не будет иметь никакого смысла за собой, или будет абузить системы сайта (например набивание опыта и пр.), то не ожидайте, что администрация будет сидеть и смотреть на это. В этом случае из-за понижения уровня, насколько я понял, отключился опыт за комменты, т.к. все, что было в блоге - бесцельный флуд.
Найдите что-то, о чем вам будет интересно писать в блоге, наполняйте его контентом, и либо модераторский состав заметит, что блог стал лучше, либо вы сами, если будете довольны контентом своего блога, сможете в определенный момент написать об этом менеджерам, попросить повышения уровня. Пока же считаю решение о понижении правильным. Такие дела.
Еще для примера, если вы хотите блог со спорным контентом, можете посмотреть на этот, еще обратите внимание на данный блог, вот тут я был несогласен о понижении уровня, т.к. мне кажется, что контент там, несмотря на то, что оскорбительный, полностью направлен на развлечение (причем как читающих, так и самого блоггера), но понижен и скрыт он был из-за постоянных оскорблений в адрес администрации (вроде бы), вот уж там действительно спорный и классный блог, для которого даже скрытие не было проблемой в свое время, т.к. пока остаются читатели, остается и блог.
ответ
XGM Bot:
Похожие вопросы:

ответ
Насколько мне известно, здесь аниме спелпаков нету та и моделей не очень много не много людей тут любят аниме. Поищи на хайве там должны быть
ответ
Все,сам разобрался. :)
ответ
Объединил, если что там не взлетело — мне в личку любым способом
ответ
Напиши автору - Эльрат
ответ
Может вас ещё кокаин научить нюхать?
Статья 227 УК РФ. Пиратство


И не в том разделе вопрос задан, к тому же


23

» WarCraft 3 / Reforged и CommandFunc.txt

Похожие вопросы:

ответ
shmatko, там нужна задержка. обычно хватает задержки в 0.0 сек. Во многих случаях использую, тк вар не успевает подготовить и прочее. Такие случаи в варе не новы. Здесь она тоже пригодилась. Короче я пробовал на гуи вэйт в 0.00 сек. Но видна иконка на сек, как вы сказали. а попробовал таймером в 0.00 сек норм получилось, иконки не видно
У таймера запуск происходит сразу, вэйт медлителен